﻿using System.Windows.Forms;
using EntitiesAndMappings.Entities;
using ProyectoActivos.Daos;
using ProyectoActivos.Validate;
using ProyectoActivos.Dtos;
using ProyectoActivos.Util;
using System;

namespace ProyectoActivos.Forms.Consultas
{
    public partial class FrmConsultaTareo : Form, IValidateForm
    {
        private TareoDAO tareoDAO;
        public static FrmConsultaTareo Activo { set; get; }
        private Boolean _valido;


        public FrmConsultaTareo()
        {
            InitializeComponent();
            tareoDAO = new TareoDAO();
            this._valido = true;
            dGridResultado.AutoGenerateColumns = false;
            Activo = this;
        }

        public void Invalid()
        {
            _valido = false;
        }

        public Boolean IsValid()
        {
            return _valido;
        }

        private void FrmConsultaTareo_Load(object sender, System.EventArgs e)
        {
            var proyectoDAO = new EntidadGenericaDAO<Proyecto>();
            cmbProyecto.DataSource = FormUtils.AddFirst(proyectoDAO.ListarTodos(), new Proyecto { Codigo = "", Descripcion = "Todos" });

            var loteDAO = new EntidadGenericaDAO<Lote>();
            cmbLote.DataSource = FormUtils.AddFirst(loteDAO.ListarTodos(), new Lote { Codigo = "", Descripcion = "Todos" });

            var lugarDAO = new EntidadGenericaDAO<Lugar>();
            cmbLugar.DataSource = FormUtils.AddFirst(lugarDAO.ListarTodos(), new Lugar { Codigo = "", Descripcion = "Todos" });

        }

        private void btnBuscar_Click(object sender, System.EventArgs e)
        {
            _valido = true;
            errorProvider.Clear();


            if (datFechaDesde.Value.Date > datFechaHasta.Value.Date)
            {
                errorProvider.SetError(datFechaDesde, @"La fecha desde debe ser menor o igual a la fecha hasta");
                errorProvider.SetError(datFechaHasta, @"La fecha hasta debe ser mayor o igual a la fecha desde");
                Invalid();
            }

      

            ActionExecutor.Execute(this, delegate
                                             {
                                                 ConsultaTareoParams consultaTareoParams = new ConsultaTareoParams
                                                                                               {
                                                                                                   Apellidos = txtApellidos.Text,
                                                                                                   Nombres = txtNombres.Text,
                                                                                                   FechaDesde = datFechaDesde.Value.Date,
                                                                                                   FechaHasta = datFechaHasta.Value.Date
                                                                                               };

                                                 if (cmbProyecto.SelectedItem != null)
                                                 {
                                                     consultaTareoParams.IdProyecto = ((Proyecto)cmbProyecto.SelectedItem).Id;
                                                 }
                                                 else
                                                 {
                                                     consultaTareoParams.IdProyecto = 0;
                                                 }


                                                 if (cmbLote.SelectedItem != null)
                                                 {
                                                     consultaTareoParams.IdLote = ((Lote)cmbLote.SelectedItem).Id;
                                                 }
                                                 else
                                                 {
                                                     consultaTareoParams.IdLote = 0;
                                                 }


                                                 if (cmbLugar.SelectedItem != null)
                                                 {
                                                     consultaTareoParams.IdLugar = ((Lugar)cmbLugar.SelectedItem).Id;
                                                 }
                                                 else
                                                 {
                                                     consultaTareoParams.IdLugar = 0;
                                                 }



                                                 var resultado = tareoDAO.ConsultaTareo(consultaTareoParams);

                                                 dGridResultado.DataSource = resultado;
                                             });
        }

        private void FrmConsultaTareo_FormClosing(object sender, FormClosingEventArgs e)
        {
            Activo = null;
        }

        private void tStripButtonExportarAExcel_Click(object sender, EventArgs e)
        {
            if (dGridResultado.Rows.Count > 0)
            {
                ActionExecutor.Execute(this, delegate
                {
                    ExcelUtils.ExportarGridAExcel(dGridResultado);
                });
            }
        }
    }
}
